package com.xie.smfs.screen;

import net.minecraft.client.gui.DrawContext;
import net.minecraft.util.Identifier;

/**
 * 专门用于渲染3x9物品栏背景的工具类
 */
public class InventoryBackgroundRenderer {
    // 使用原版的容器纹理
    private static final Identifier CONTAINER_TEXTURE = new Identifier("textures/gui/container/generic_54.png");
    // 槽位大小
    private static final int SLOT_SIZE = 18;
    // 3行9列
    private static final int ROWS = 3;
    private static final int COLS = 9;

    /**
     * 渲染3x9物品栏背景
     * @param context 绘制上下文
     * @param x 左上角X坐标
     * @param y 左上角Y坐标
     */
    public static void render3x9Background(DrawContext context, int x, int y) {
        // 渲染背景的顶部边框
        context.drawTexture(CONTAINER_TEXTURE, x, y, 0, 0, COLS * SLOT_SIZE + 14, 17);

        // 渲染3行物品槽位
        for (int row = 0; row < ROWS; row++) {
            // 渲染左侧边框
            context.drawTexture(CONTAINER_TEXTURE, x, y + 17 + row * SLOT_SIZE, 0, 17, 7, SLOT_SIZE);

            // 渲染槽位行
            for (int col = 0; col < COLS; col++) {
                context.drawTexture(CONTAINER_TEXTURE,
                        x + 7 + col * SLOT_SIZE,
                        y + 17 + row * SLOT_SIZE,
                        7, 17, SLOT_SIZE, SLOT_SIZE);
            }

            // 渲染右侧边框
            context.drawTexture(CONTAINER_TEXTURE,
                    x + 7 + COLS * SLOT_SIZE,
                    y + 17 + row * SLOT_SIZE,
                    7 + SLOT_SIZE, 17, 7, SLOT_SIZE);
        }

        // 渲染底部边框
        context.drawTexture(CONTAINER_TEXTURE,
                x, y + 17 + ROWS * SLOT_SIZE,
                0, 17 + SLOT_SIZE, COLS * SLOT_SIZE + 14, 7);
    }

    /**
     * 获取3x9物品栏的总宽度（包括边框）
     */
    public static int getTotalWidth() {
        return COLS * SLOT_SIZE + 14; // 9个槽位宽度 + 左右边框
    }

    /**
     * 获取3x9物品栏的总高度（包括边框）
     */
    public static int getTotalHeight() {
        return ROWS * SLOT_SIZE + 24; // 3行槽位高度 + 顶部和底部边框
    }

    /**
     * 获取槽位在背景中的X坐标
     * @param backgroundX 背景左上角X坐标
     * @param slotColumn 槽位列索引 (0-8)
     */
    public static int getSlotX(int backgroundX, int slotColumn) {
        return backgroundX + 7 + slotColumn * SLOT_SIZE;
    }

    /**
     * 获取槽位在背景中的Y坐标
     * @param backgroundY 背景左上角Y坐标
     * @param slotRow 槽位行索引 (0-2)
     */
    public static int getSlotY(int backgroundY, int slotRow) {
        return backgroundY + 17 + slotRow * SLOT_SIZE;
    }
}